<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>

    console.log(Array.prototype);
    //copyWithin  filter  fill  find  findIndex
    // includes  every some reduce reduceRight keys  entries

    /*
    * copyWithin 会返回一个新的数组，不会改变数组的长度，如果有有超出部分，自动截取超出的不要
    * 从原数组中读取内容，替换数组的指定位置的内容
    * 参数(替换的目标的起始位置target，查找的起始位置begin，查找的结束位置end——默认是到结束位置)
    *
    * */
    let arry1 =[1,2,3,4,5,6,7];
    arry1.copyWithin(4,2,4)
    console.log('copyWithin',arry1);

    /* todo 所有数组实例上的方法，参数是从索引n到索引m的都是 包含n不包含m（包前不包后）
    * fill 按照指定字符填充数组的指定位置
    * 将数组每一项都变成指定的字符
    * */
    console.log('fill',arry1.fill('成都'));

    //将数组索引3，4的位置替换成 成都
    let arr2 = [1,2,3,6,5,5,6,8]
    console.log('arr2.fill(\'成都\', 3, 5)',arr2.fill('成都', 3, 5));

    /*
    * filter 遍历数组 根据返回值过滤原有数组
    *——返回一个新数组,原始的数组不发生改变
    * */
    let arrFilter = [1,2,3,'成都','四川','重庆',9]
    let filterData = arrFilter.filter(function (item,index) {
        //如果返回true 就留下当前项，返回false不留下当前项
        //return true
        return typeof item ==='number'
    })
    console.log('filterData',filterData);

    /*
    * find 先遍历数组，一旦参数函数返回true 停止查找 返回当前项
    *
    * */
    let str = arrFilter.find(function (item) {
        return typeof item ==='number'
    })
    console.log('find',str);


    /*
    * findIndex 先遍历数组，一旦参数函数返回true 停止查找 返回当前项的索引（下标）
    * 只会查找一个
    * */
    let str3 = arrFilter.findIndex(function (item) {
        //return typeof item ==='string'
        return  item ==='四川'
    })
    console.log('findIndex',str3);


    /*
    * every 先遍历数组，如果遍历的每一项都是true，则返回true，只要有一个为false，则返回的结果是false （可以理解成&& 与的关系）
    * 只会查找一个
    * */
    console.log([1, 2, 3, 4, 5].every(function (item) {
        return typeof  item === 'number';
    }),'every 先遍历数组');


    /*
    * some 先遍历数组，如果有一项是true，则返回true （可以理解成|| 或的关系）
    * 只会查找一个
    * */
    console.log([1, 2, 3, 4, 5,'你是人间四月天'].some(function (item) {
        return typeof  item === 'number';
    }),'every 先遍历数组');


    /*
    * reduce 迭代，第二个参数作为初始值的prev
    * reduceRight 跟reduce一样，只是顺序是从右边开始
    * */
    let ary4 = [1,2,3,4,5];
    var sumNum = ary4.reduce(function(prev,item){
        console.log('reduce 迭代',prev);
        //prev 上一次的返回值，item：当前项
        return prev+item;
    })

    console.log('sunNum',sumNum);



    /*
    * keys 遍历每一项索引的接口，使用for of 遍历
    *
    * */
    let aryKeys = [1,2,3,4,5];
    for(let item of aryKeys.keys()){
        console.log('可以遍历for of的下标', item);
    }

    //默认使用for of 遍历数组，默认遍历的就是每一个项
    for(let it of aryKeys){
        console.log('for of每一个项',it);
    }


    /*
    * entries 遍历接口，可以遍历到索引的每一项，每一次遍历得到一个数组【索引，当前项】
    *
    * */
    for(let e of aryKeys.entries()){
        console.log('entries【索引，当前项】',e);
    }





    /*
    * includes 判断数组中有没有某一项
    *          第二个参数是开始查找的位置
    *          不传的话是查找所有的
    * */
    console.log('includes1',[1, 2, 3].includes(1));
    console.log('includes2',[1, 2, 3].includes(1, 2));


</script>
</body>
</html>